package com.thread.StaticProxy;
/*
一、什么叫static Proxy（静态代理）模式：
1、真实对象（新婚夫妇）和代理对象（婚庆公司）都要实现同一个接口interface Marry；
2、代理对象必须要要代理真实角色(代理对象去完成真实对象干的活)
这样做的好处：
1、代理对象完成代理对象很多真实对象完成不了的事情
2、真实对象专注于完成自己的事情
 */
public class staticProxy {
    public static void main(String[] args) {
        newlyweds newlyweds = new newlyweds();
        //new Thread(()-> System.out.println("我爱你！")).start();
        new WeddingCompany(newlyweds).weddingCeremony();
//        WeddingCompany weddingCompany = new WeddingCompany(newlyweds);//婚庆公司接收真实结婚对象
//        weddingCompany.weddingCeremony();
    }
}

interface Marry{
    void weddingCeremony();//婚礼
}

//需要结婚的人，是真实角色：定义接口重写weddingCeremony方法
class newlyweds implements Marry{
    @Override
    public void weddingCeremony(){
        System.out.println("（真实对象）新婚夫妇：享受结婚的过程");
    }
}

//完成结婚的准备的婚庆公司，是代理角色：定义接口重写weddingCeremony方法
class WeddingCompany implements Marry{
    private Marry target;//定义结婚目标

    WeddingCompany(Marry target) {//构造方法，落实谁结婚——>真实对象要传入
        this.target = target;
    }

    @Override
    public void weddingCeremony() {
        before();//结婚前
        this.target.weddingCeremony();//这是真实对象，他被代理了，完成结婚
        after();//结婚后
    }

    private void after() {
        System.out.println("（代理对象）婚礼之后：收拾婚礼场地");
    }

    private void before() {
        System.out.println("（代理对象）婚礼之前：布置婚礼现场");
    }
}